package com.pai4j.message.websocket;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.HashSet;
import java.util.Set;

/**
 * WebSocket配置属性
 *
 * @author PAI4J Team
 * @date 2025-11-01
 */
@Data
@Component
@ConfigurationProperties(prefix = "pai4j.message.websocket")
public class WebSocketProperties {

    /**
     * 是否启用WebSocket
     */
    private boolean enabled = true;

    /**
     * 业务代码列表（支持的端）
     */
    private Set<String> bizCodes = new HashSet<>(Set.of("PC_CHAT", "MOBILE_CHAT", "WEB_CHAT"));

    /**
     * 健康检查配置
     */
    private HealthCheck healthCheck = new HealthCheck();

    /**
     * 降级配置
     */
    private Fallback fallback = new Fallback();

    /**
     * 健康检查配置
     */
    @Data
    public static class HealthCheck {
        /**
         * 是否启用健康检查
         */
        private boolean enabled = true;

        /**
         * 健康检查间隔（毫秒）
         */
        private long interval = 60000L;

        /**
         * 是否自动清理失效连接
         */
        private boolean autoCleanup = true;
    }

    /**
     * 降级配置
     */
    @Data
    public static class Fallback {
        /**
         * 是否启用降级
         */
        private boolean enabled = true;

        /**
         * 降级渠道
         */
        private String channel = "message-queue";

        /**
         * 降级策略（ALWAYS-总是降级，ON_FAILURE-失败时降级）
         */
        private String strategy = "ON_FAILURE";
    }
}

